package com.lineengine.lineengine.engine;


import com.lineengine.lineengine.context.IContext;
import com.lineengine.lineengine.node.INode;
import com.lineengine.lineengine.result.IResult;

/**
 * <p>
 * 引擎
 * </p>
 *
 * @author wenrong.yu
 * @since 2020-11-07 21:18
 */
public interface IEngine<T extends IContext<T>> {
    /**
     * 执行
     *
     * @param node    节点
     * @param context 上下文
     * @return 执行结果
     */
    IResult<T> process(INode<T> node, T context);

    /**
     * 失败后重置
     *
     * @param context 上下文
     */
    void reset(T context);
}
